package io.gitee.yaoshanli.engine.service;

import io.gitee.yaoshanli.engine.model.WfProcessModel;
import io.gitee.yaoshanli.engine.model.WfTaskModel;

import java.util.List;

/**
 * 任务处理
 */
public interface ITaskService {

    /**
     *  启动创建流程任务
     * @param taskId    任务ID
     * @param wfId   工作流ID
     * @param oper  任务名称
     * @param oper  操作人
     * @param desc   任务描述
     * @param dept  发起部门
     * @return
     */
    public WfTaskModel startTask(String taskId, String wfId, String oper, String name, String desc, String dept);

    /**
     *  执行处理流程任务
     * @param taskId 任务ID
     * @param oper  执行人
     * @param desc
     * @return
     */
    public WfTaskModel executeTask(String taskId, String oper,String desc);
    /**
     *  执行处理流程任务,多节点选择
     * @param taskId 任务ID
     * @param node_id 下一步的节点ID
     * @param oper  执行人
     * @param desc
     * @return
     */
    public WfTaskModel executeTask(String taskId,String node_id ,String oper,String desc);

    /**
     * 作废
     * @param taskId
     * @param oper
     * @param desc
     * @return
     */
    public WfTaskModel cancelTask(String taskId ,String oper,String desc);

    /**
     *  未被处理，撤回流程
     * @param taskId 任务ID
     * @param oper  执行人
     * @return
     */
    public WfTaskModel retractTask(String taskId, String oper);

    /**
     *  退回流程到开始节点
     * @param taskId 任务ID
     * @param oper  执行人
     * @return
     */
    public WfTaskModel returnTask(String taskId, String oper,String desc);

    /**
     *  流程节点跳转
     * @param taskId    任务ID
     * @param nodeId    目标节点
     * @param oper  执行人
     * @return
     */
    public WfTaskModel executeAndJumpTask(String taskId, String nodeId, String oper,String desc);

    /**
     *  删除流程
     * @param taskId 任务ID
     * @param oper  执行人
     * @return
     */
    public WfTaskModel deleteTask(String taskId, String oper);


    /**
     *  启动自由流程
     * @param taskId    任务ID
     * @param wfId  工作流ID
     * @param oper  执行人
     * @return
     */
    public WfTaskModel startFreeTask(String taskId, String wfId, String oper);

    /**
     *  执行自由流程
     * @param taskId
     * @param oper  执行人
     * @return
     */
    public WfTaskModel executeFreeTask(String taskId, String oper);


    /**
     * 获取当前任务
     * @param taskid
     * @return
     */
    public WfTaskModel getTask(String taskid);
    /**
     *  获取审批历史
     * @param taskid
     * @return
     */
    public List<WfProcessModel> getTaskHisList(String taskid);
}
